// ES6新增了let命令，用来声明变量。它的用法类似于var，但是所声明的变量，只在let命令所在的代码块内有效。
// const声明一个只读的常量。一旦声明，常量的值就不能改变。
function authRequest({url, data, method, dataType, header, success, fail, complete}) {
  // 获取accessToken
  const accessToken = wx.getStorageSync('ak');
  const authString = 'Bearer ' + accessToken;
  // 请求头
  const commonHeader = {
    'Accept': 'application/json',
    'Authorization': authString
  };
  // 合并对象
  // Object.assign方法的第一个参数是目标对象，后面的参数都是源对象。
  // 注意，如果目标对象与源对象有同名属性，或多个源对象有同名属性，则后面的属性会覆盖前面的属性。、
  /* Object.assign方法用于对象的合并，将源对象（ source ）的所有可枚举属性，复制到目标对象（ target ）。
   var target = { a: 1 };
   var source1 = { b: 2 };
   var source2 = { c: 3 };
   Object.assign(target, source1, source2);
   target // {a:1, b:2, c:3}*/

  const requestHeader = Object.assign(commonHeader, header ? header : {});
  // 这里的data相当于data：data   es6的语法
  wx.request({
    url: 'https://wx.duyoucai.com/api' + url,
    // data请求的参数
    data,
    // method默认为 GET，有效值：OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
    method,
    // 默认为 json。如果设置了 dataType 为 json，则会尝试对响应的数据做一次 JSON.parse
    dataType,
    // 设置请求的 header , header 中不能设置 Referer
    header: requestHeader,
    // 成功回调
    success,
    // 失败回调
    fail,
    //无论失败还是成功都执行
    complete
  })
};

// ------------------------------------------------------------


// 转换成标准时间
function parserDate(date) {
  // Date.parse() 方法解析一个表示某个日期的字符串，并返回从1970 - 1 - 1 00:00:00 UTC 到该日期对象（该日期对象的UTC时间）的毫秒数，如果该字符串无法识别，或者一些情况下，包含了不合法的日期数值（如：2015 - 02 - 31），则返回值为NaN。
  var t = Date.parse(date);
  // isNaN() 函数用于检查其参数是否是非数字值。
  if (!isNaN(t)) {
    // replace() 方法用于在字符串中用一些字符替换另一些字符, 或替换一个与正则表达式匹配的子串。
    // /-/g正则 /-匹配带- 如：2017-06-01 表达式加上参数g之后，表明可以进行全局匹配
    return new Date(Date.parse(date.replace(/-/g, "/")));
  } else {
    return new Date();
  }
};
// 计算分钟
function minutes(start, end) {
  // getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数
  var mistiming = end.getTime() - start.getTime(); //时间差秒
  //计算出小时数
  var dayDifference = mistiming % (24 * 3600 * 1000);  //计算天数后剩余的毫秒数
  //计算相差分钟数
  var hourDifference = dayDifference % (3600 * 1000);        //计算小时数后剩余的毫秒数
  var minute = Math.floor(hourDifference / (60 * 1000));
  return minute
}

// ES6的模块化的基本规则或特点：

// 　　　　1：每一个模块只加载一次， 每一个JS只执行一次， 如果下次再去加载同目录下同文件，直接从内存中读取。 一个模块就是一个单例，或者说就是一个对象；

// 　　　　2：每一个模块内声明的变量都是局部变量， 不会污染全局作用域；

// 　　　　3：模块内部的变量或者函数可以通过export导出；

// 　　　　4：一个模块可以导入别的模块
// 单个直接在export的地方定义导出的函数，或者变量

// module.exports={
// 多个定义导出的函数，或者变量...
// }
module.exports = {
  authRequest,
  parserDate,
  minutes
};